<?xml version="1.0" encoding="UTF-8"?>
<doc>

<title>Array 类</title>

<para>
<ptitle>Array 类</ptitle>
　Array 类是处理<kw>数组</kw>的类型。<r/>
<r/>
　可以通过创建这个类的实例，并在间接成员选择运算符（[ ]）中传递指定的索引的方式将这个类作为数组使用。索引为整数，0表示数组中的第一个元素，1表示第二个对象，依此类推。如果指定负数作为索引，则将被当作从数组的最后开始指定元素。 (-1 表示最后的对象)。<r/>
<example>
	var a = new Array();<r/>
	var i;<r/>
	for(i=0;i&lt;100;i++) a[i]=i;<r/>
</example>
<r/>
　不必要对数组的大小做出定义。Array 类将自动扩展到用户使用的索引的大小，并将没有被赋值的元素初始化为 void 。<r/>
<r/>
　此外，Array 类拥有 count 属性，该属性表示数组的大小。通过对 count 属性赋值，也可以改变数组的大小。<r/>
</para>


<para>
<ptitle>表达式声明数组</ptitle>
　<tt>使用 <kw>[ ]</kw></tt> ，可以在表达式中现场记述 <tt>Array</tt> 类型的对象。<tt>[ ]</tt> 中应该按顺序列举作为数组初始元素的表达式，元素之间用逗号分割。比如说，如果执行<r/>
<tt>
	var ar = ["a", "b", "c"];
</tt>
　这样一个表达式，则变量 <tt>ar</tt> 将指向一个包含 <tt>"a" "b" "c"</tt> 这几个元素的 <tt>Array</tt> 类型对象。<r/>
</para>

<para>
<ptitle>count</ptitle>
　count 属性表示数组的大小。<r/>
</para>

<para>
<ptitle>load</ptitle>
　load 方法，可以从文件中读取数据。<r/>
<bq>
语法 : load(&lt;文件名&gt;, &lt;模式=''&gt;)<r/>
</bq>
　本方法将从文本文件读取数组数据，将文本文件中的文本按行作为元素放入数组，最终count属性将和文件的行数相等。<r/>
　模式参数可以用一个字符串指定读取文件时的模式。模式的含义将随着TJS运行的环境有所不同。如果在 "o" 之后写入一个十进制偏移量，则将从与这个数值相等个字节后的位置开始读取。<r/>
　随着 TJS 运行环境的不同，可能存在本方法和 save 方法、 saveStruct 方法无法使用的情况。<r/>
　load 方法将返回这个 Array 类对象自身。<r/>
</para>

<para>
<ptitle>save</ptitle>
　save 方法可以向文件写入数据。<r/>
<bq>
语法 : save(&lt;文件名&gt;, &lt;模式=''&gt;)<r/>
</bq>
　本方法将数组写入文件。本方法基本上是一行一个元素顺序记录各个元素数据，但遇到对象和类、函数等类型的数据，文件中对应的位置将是空行。<r/>
　模式参数可以用一个字符串指定写入文件时的模式。模式的含义将随着TJS运行的环境有所不同，对于吉里吉里来说，指定 "c" 则将对文件进行简单的加密（ 可以使用 load 方法读取 ），指定 "z" 则将把文件压缩保存（ 无法与 "c" 共用，该模式保存的数据也可以直接用 load 方法读取 ）。如果在 "o" 之后写入一个十进制偏移量，则将从与这个数值相等个字节后的位置开始写入。<r/>
　save 方法将返回这个 Array 类对象自身。<r/>
</para>

<para>
<ptitle>split</ptitle>
　split 方法可以对字符串进行分割。<r/>
<bq>
语法 : split(&lt;模式/分隔符集合&gt;, &lt;字符串&gt;, &lt;(保留)&gt;, &lt;是否忽略空的元素=false&gt;)
</bq>
　初始化数组，并用模式字符串或分隔符分割字符串，将结果复制到数组中。<r/>
　需要在第一个参数中指定模式或者分隔符集合。<r/>
　需要使用模式匹配时，请传入相关的正则表达式对象。<r/>
　需要使用分隔符集合时，请传入需要被识别为分隔符的字符。如果传入字符串，则字符串中的各个字符都将被做为分隔符处理。<r/>
　第三个参数为了将来的版本暂时保留。<r/>
　参数“是否忽略空的元素”，在不希望把空的元素（ 比如说指定逗号为分隔符时的 ,,,,,,, 等 ）复制到数组时可以被指定为true。<r/>
　请注意参数的顺序。<r/>
</para>

<para>
<ptitle>join</ptitle>
　join 方法可以把数组合并为一个字符串。<r/>
<bq>
语法 : join(&lt;分隔符&gt;, &lt;(保留)&gt;, &lt;是否忽略空的元素=false&gt;)
</bq>
　将数组中的各个元素结合，各个元素之间用指定的分隔符分割，并返回合并后的字符串。<r/>
　参数“是否忽略空的元素”为 true 时，数组元素的void将被忽略。<r/>
<example>
	var ar = [ "a", "b", void, "d" ];<r/>
	var s1 = ar.join(","); // 将 s1 赋值为 "a,b,,d"<r/>
	var s2 = ar.join(",",,true); // 将 s2 赋值为 "a,b,d"<r/>
</example>
</para>

<para>
<ptitle>reverse</ptitle>
　reverse 方法可以把数组的元素按照顺序反过来排列。<r/>
<bq>
 语法: reverse()<r/>
</bq>
</para>

<para>
<ptitle>sort</ptitle>
　sort 方法将对数组进行排序。<r/>
<bq>
语法 : sort(&lt;排序顺序='+'&gt;, &lt;是否进行稳定排序=false&gt;)
</bq>
　排序顺序需要时以下的字符串中的一个。升序就是将数组对象从小到大重新排列，降序则相反。省略排序顺序参数则将默认按照 "+" 排序。<r/>
<bq>
"+"  : 升序排列 (利用普通的 &lt; 运算符进行比较)<r/>
"-"  : 降序排列<r/>
"0"  : 按照数值顺序升序排列 ( 10,2,1 将被排序为 1,2,10 )<r/>
"9"  : 按照数值顺序降序排列<r/>
"a"  : 按照字符串顺序升序排列 ( "a","c","b" 将被排序为 "a","b","c" )<r/>
"z"  : 按照字符串顺序降序排列<r/>
</bq>
　可以指定函数代替字符串作为排序顺序的依据。函数需要拥有两个参数，并在当第一个参数应排在第二个参数之前时返回 true 。(请注意，TJS 的 sort 与 JavaScript 的 sort 方法，作为排序顺序传递的函数所需要的参数以及返回值不同 )。<r/>
<r/>
　第二个参数将需要指定是否进行稳定排序。如果省略此参数则将默认为 false ，也就是进行不稳定排序。所谓的“稳定排序”，就是指相等的数组元素的顺序在排序后也相同的排序方法。对于不稳定排序，则不保证相等的元素在排序后和原先的顺序相同。<r/>
<example>
	var array = [ 0, 1, 2, 10, 12, 14, 4, 6, 2 ];<r/>
	array.sort();<r/>
		// ↑ 方法执行后，array 的值为 [0, 1, 2, 2, 4, 6, 10, 12, 14] <r/>
	array.sort('-');<r/>
		// ↑ 方法执行后，array 的值为 [14, 12, 10, 6, 4, 2, 2, 1, 0] <r/>
	array.sort('a');<r/>
		// ↑ 方法执行后，array 的值为 [0, 1, 10, 12, 14, 2, 2, 4, 6] <r/>
<r/>
	var array = [ "hoge", "foo" , "bar", "baz" ];<r/>
	array.sort();<r/>
		// ↑ 方法执行后，array 的值为 ["bar", "baz", "foo", "hoge"] <r/>
<r/>
	var array = [ "abcd", "abc", "ab", "a" , "b", "c" ];<r/>
	array.sort(function(a,b) { return a&lt; b; } );<r/>
		// ↑ 以上表达式和指定 '+' 相同<r/>
<r/>
	var array = [ "abcd", "abc", "ab", "a" , "b", "c" ];<r/>
	array.sort(function(a,b) { return a.length &lt; b.length; } );<r/>
		// ↑ 按照字符串的长短顺序，短的在前。<r/>
		// (由于是不稳定排序，长度相同的元素例如 "a" "b" "c" 在排序后不保证还是 "a" "b" "c" 的顺序)<r/>
<r/>
	var array = [ "abcd", "abc", "ab", "a" , "b", "c" ];<r/>
	array.sort(function(a,b) { return a.length &lt; b.length; }, true );<r/>
		// ↑ 按照字符串的长短顺序，短的在前。<r/>
		// (稳定排序，长度相同的元素例如"a" "b" "c" 在排序后也保持相同的顺序)<r/>
</example>
</para>

<para>
<ptitle>saveStruct</ptitle>
　saveStruct 可以将数组结构化后的结果输出到文件。<r/>
<bq>
语法 : save(&lt;文件名&gt;, &lt;模式=''&gt;)<r/>
</bq>
　saveStruct 方法用可复原的方式将元素的数据和状态输出到文件。<r/>
　被输出的元素包括字符串、实数、字节串、整数类型。此外，元素中包含 Array 类或者 Dictionary 类的时候，对象的内容也将被输出到文件。此外的元素将被作为 void 对象输出。<r/>
　例如：<r/>
<example>
	([ 1, 2, 3, [4, 5], %[ a : 1, b : 2 ], "字符串" ]).saveStruct("out.txt");<r/>
</example>
　则将被存为内容类似于
<bq>
[<r/>
	int 1,<r/>
	int 2,<r/>
	int 3,<r/>
	[<r/>
		int 4,<r/>
		int 5<r/>
	],<r/>
	%[<r/>
		"a" =&gt; int 1,<r/>
		"b" =&gt; int 2<r/>
	],<r/>
	string "字符串"<r/>
]<r/>
</bq>
　这样的文件。这样只需要把这个文件整体作为一个表达式求值，就可以恢复到与保存时相同的结构。<r/>
　saveStruct 方法返回 Array 类对象自身。<r/>
</para>

<para>
<ptitle>assign</ptitle>
　assign 方法可以对数组进行复制操作。<r/>
<bq>
语法 : assign(&lt;源数组&gt;)<r/>
</bq>
　把参数指定的其他数组的内容，原原本本的复制到调用该方法的数组中。<r/>
<r/>
　将字典(Dictionary类型的对象)作为复制的源数组时，该字典中的各个成员将按照成对的名称、值的顺序交错地放入数组中。字典成员在数组中的顺序不定。<r/>
</para>

<para>
<ptitle>assignStruct</ptitle>
　assignStruct 方法可以对数组连同结构进行复制操作。<r/>
<bq>
语法 : assignStruct(&lt;源数组&gt;)<r/>
</bq>
　把参数指定的其他数组的内容，原原本本的复制到调用该方法的数组中。<r/>
　和 assign 方法不同，如果成员中存在数组或者字典数组的时候，将用递归的方法将其内容也复制到执行操作的数组中
 ( assign 方法则只会复制对成员对象的引用 )。<r/>
</para>

<para>
<ptitle>clear</ptitle>
　clear 方法可以将数组的所有元素删除。<r/>
</para>

<para>
<ptitle>erase</ptitle>
　erase 方法可以删除用户给出的索引所指定的元素。<r/>
<bq>
语法 : erase(&lt;索引&gt;)<r/>
</bq>
　本方法将删除索引所指定位置的对象。该索引之后的所有元素将会向前移动一个位置，保持数组紧凑。当索引超过数组大小的时候将发生例外。<r/>
　（注：本方法不会对元素指向的对象本身进行删除操作，如果环境中还存在其他对这个对象的引用则这个对象将被保留。）<r/>
</para>

<para>
<ptitle>remove</ptitle>
　remove 方法将会删除和指定的值相等的元素。<r/>
<bq>
语法 : remove(&lt;值&gt;, &lt;是否全部删除=true&gt;)<r/>
</bq>
　将指定的值与数组中的各个元素进行类型识别比较 ( <kw>===</kw> 运算符的操作 )，并删除与指定值一致的元素。<r/>
　当参数“是否全部删除”为 false 时，则只删除第一个匹配的元素。否则所有满足条件的元素都将被删除。<r/>
　（注：本方法不会对元素指向的对象本身进行删除操作，如果环境中还存在其他对这个对象的引用则这个对象将被保留。）<r/>
</para>

<para>
<ptitle>insert</ptitle>
　insert 方法将把指定的值插入到指定的位置上。<r/>
<bq>
语法 : insert(&lt;位置&gt;, &lt;值&gt;)<r/>
</bq>
　在“位置”参数所指向的索引位置上，插入参数“值”所给定的元素。该位置之后的元素都将向后移动一个位置。<r/>
</para>

<para>
<ptitle>add</ptitle>
　add 方法将把指定的值追加到数组的最后。<r/>
<bq>
语法 : add(&lt;值&gt;)<r/>
</bq>
　本方法在数组的最后追加指定的值，并返回这个值被追加的位置。<r/>
</para>

<para>
<ptitle>find</ptitle>
　find 方法将返回指定的值最初出现位置的索引。<r/>
<bq>
语法 : find(&lt;值&gt;, &lt;搜索开始位置=0&gt;)<r/>
</bq>
　从参数“搜索开始位置”的位置开始搜索指定的值，并返回最初找到这个值的位置的索引。如果没有找到指定值的时候将返回 -1 。<r/>
　比较操作使用类型识别比较 ( === 运算符的操作 ) 。<r/>
</para>



</doc>